/**
 *	操作数据库接口方法
 *	开发者：雨中磐石
 *	地址：www.rockoa.com
 *	日期：2023-07-17
 */

package com.framerock.db;


import com.framerock.baselib.CallBack;
import java.util.ArrayList;
import java.util.Map;

/**
 * 操作数据库接口方法
 * */
public interface DBBase {

    /**
     * 关闭数据库
     * */
    void close();

    /**
     * 执行sql
     * @param sql 原生sql
     * */
    Boolean Query(String sql);

    /**
     * 获取db的错误信息
     * */
    String error();

    /**
     * 新增值
     * @param table 对应表
     * @param map Map的数据
     * @return 返回新增的自增id
     * */
    int insert(String table, Map<String, String> map);

    /**
     * 新增值
     * @param table 对应表
     * @param map Map的数据
     * @return Boolean是否成功
     * */
    Boolean insertbo(String table, Map<String, String> map);

    /**
     * 更新
     * @param table 对应表
     * @param map Map的数据
     * @param where 更新sql条件
     * */
    Boolean update(String table, Map<String, String> map, String where);

    /**
     * 更新
     * @param table 对应表
     * @param upcont 更新内容
     * @param where 更新sql条件
     * */
    Boolean update(String table, String upcont, String where);

    /**
     * 删除数据
     * @param table 对应表
     * @param where 更新sql条件
     * */
    Boolean delete(String table, String where);

    /**
     * 返回一行数据
     * @param sql 原生sql
     * @return 返回<String, String>的Map数据
     * */
    Map<String,String> getOne(String sql);

    /**
     * 返回一行数据
     * @param table 对应表
     * @param where 对应条件
     * @return 返回<String, String>的Map数据
     * */
    Map<String,String> getOne(String table, String where);

    /**
     * 返回一行数据
     * @param table 对应表
     * @param where 对应条件
     * @param fields 字段，如id,name
     * @return 返回<String, String>的Map数据
     * */
    Map<String,String> getOne(String table, String where, String fields);

    /**
     * 返回所有的数据
     * @param sql 原生sql
     * @param call 需要的额外处理的CallBack
     * @return 返回List的Map数据
     * */
    ArrayList<Map<String, String>> getAll(String sql, CallBack call);

    /**
     * 返回所有的数据
     * @param sql 原生sql
     * @return 返回List的Map数据
     * */
    ArrayList<Map<String, String>> getAll(String sql);

    /**
     * 返回对应条件记录数
     * @param table 对应表
     * @param where 对应条件
     * @return int
     * */
    int getCount(String table, String where);

    /**
     * 返回对应表的结构
     * @param table 对应表
     * */
    ArrayList<Map<String, String>> getColumns(String table);

    /**
     * 返回数据库下所有的表
     * @param base 对应表
     * */
    String[] getAlltable(String base);

    /**
     * 返回数据库下所有的表
     * */
    String[] getAlltable();
}